package 面向对象;
/*账户号 accountNumber（String，长度必须为 10 位数字，否则设为默认值 "0000000000"）
账户持有人姓名 ownerName（String，不能为 null 或空字符串，否则设为默认值 "Unknown"）
余额 balance（double，必须 ≥ 0，否则设为 0.0）
账户状态 isActive（boolean，默认 true）
数据校验：
在 构造方法 和 setter 方法 中，对 accountNumber、ownerName、balance 进行校验，不符合条件时输出错误信息并设置默认值。
方法：
存款 deposit(double amount)：
如果 amount > 0，增加余额，并返回 true。
否则输出错误信息，返回 false。

*/
public class BankAccount {
    private String accountNumber;
    private String ownerName;
    private double balance;
    private boolean isActive;
    public BankAccount(){}
    public BankAccount(String accountNumber,String ownerName,double balance){
        setAccountNumber(accountNumber);
        setOwnerName(ownerName);
        setBalance(balance);
        this.isActive = true;
    }
    public void setAccountNumber(String accountNumber){
        if(accountNumber == null || !accountNumber.matches("\\d{10}")){
            this.accountNumber = "0000000000";
        }else{
            this.accountNumber = accountNumber;
        }
    }
    public String getAccountNumber(){
        return accountNumber;
    }
    public void setOwnerName(String ownerName){
        if(ownerName == null || ownerName.trim().isEmpty()){
            this.ownerName = "Unknown";
        }else{
            this.ownerName = ownerName;
        }
    }
    public String getOwnerName(){
        return ownerName;
    }
    public void setBalance(double balance){
        if(balance < 0){
            this.balance= 0.0;
        }else{
            this.balance=balance;
        }
    }
    public double getBalance(){
        return balance;
    }
    public boolean getIsAcative(){
        return isActive;
    }
    //存款
    public boolean deposit(double amount){
        if (amount > 0){
            balance = balance +amount ;
            System.out.println("存款后的余额为："+balance + "元");
            return true;
        }else {
            System.out.println("错误信息");
            return false;
        }
    }
    //取款
    public boolean withdraw(double amount){
        //如果账户未激活（!isActive），拒绝操作并返回 false。
        //如果 amount > 0 且 amount ≤ balance，减少余额，返回 true。
        //否则返回 false。
        if(! isActive){
            System.out.println("拒绝操作");
            return false;
        }
        if(amount > 0 && amount <= balance){
            balance = balance - amount;
            System.out.println("取款后的余额为："+balance + "元");
            return true;
        }else {
            return false;
        }
    }
    //冻结账户
    //冻结账户 freezeAccount()：设置 isActive = false。
    //解冻账户 unfreezeAccount()：设置 isActive = true。
    //显示账户信息 displayAccountInfo()：
    //输出账户号、持有人姓名、余额、状态（如 "Active: true"）
    public void freezeAccount(){
        isActive = false;
        System.out.println("冻结账户");
    }
    public void unfreezeAccount(){
        isActive = true;
        System.out.println("解冻账户");
    }
    public void displayAccountInfo(){
        System.out.println("账户号:"+accountNumber+" "+"持有人姓名:"+ownerName+" "+"余额:"+balance+"元"+ " "+"账户状态:"+isActive);
    }
}
